package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
 * JDBC Java DataBase Connectivity
 * java的数据库链接，是由JAVA官方提供的一套用于链接数据库的标准驱动接口。
 * 不同的数据库厂商都提供了一套对应的实现类，我们称这套实现类为"驱动"
 *
 * 整体步骤
 * 1:在项目跟目录下的pom.xml文件中加上MySQL驱动的依赖
 *  <dependencies>
 *         <!-- 连接MySQL数据库的依赖 -->
 *         <dependency>
 *             <groupId>mysql</groupId>
 *             <artifactId>mysql-connector-java</artifactId>
 *             <version>8.0.15</version>
 *         </dependency>
 *  </dependencies>
 *
 * 2:按照下面代码步骤，测试与数据库链接
 *
 *
 *
 */
public class JDBCDemo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        /*
            使用JDBC链接数据库并操作的基本流程
            1:加载驱动
            2:使用DriverManager利用驱动与数据库建立链接，得到Connection对象
            3:通过连接对象创建用于执行SQL语句的语句对象:Statement
            4:通过Statement执行SQL，如果执行的是DQL语句，则会得到查询结果集ResultSet
            5:遍历结果集得到查询内容
            6:与数据库断开链接
         */
        //不同数据库厂商实现的Driver接口的实现类包名和实现类名不完全一样
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection=DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                "root",
                "root"
        );
        System.out.println("成功连接数据库！");

        Statement statement = connection.createStatement();

        /*
            创建一张表
            CREATE TABLE userinfo(
                id INT PRIMARY KEY AUTO_INCREMENT,
                username VARCHAR(30),
                password VARCHAR(30),
                nickname VARCHAR(30),
                age INT(3)
            )
         */
        String sql = "CREATE TABLE userinfo( " +
                "                id INT PRIMARY KEY AUTO_INCREMENT, " +
                "                username VARCHAR(30), " +
                "                password VARCHAR(30), " +
                "                nickname VARCHAR(30), " +
                "                age INT(3) " +
                "            )";

        /*
            execute方法用于执行SQL语句
            boolean execute(String sql)
            返回值用于表达执行该SQL后是否存在查询结果集。

            由于执行DML语句(INSERT,UPDATE,DELETE)和DQL语句(SELECT)有专门的方法
            因此execute方法通常仅用于执行DDL语句

         */
        statement.execute(sql);
        System.out.println("执行完毕!");

        //最终操作完毕与数据库断开链接
        connection.close();
    }
}
